package cn.lg.soar.core.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * token 方式实现幂等性（白名单法）
 * 优点：使用过后既删除，可及时释放缓存
 * 缺点：使用麻烦，前端需先请求获取token，后端需提供生成token的接口，不能用于防恶意重放攻击
 * 前端：
 *  1.用户进入页面填写数据前获取token
 *  2.用户提交数据时带上token
 *  3.提交失败（非幂等校验的失败）重新获取token
 * 后端：
 *  1.token生成：生成token，token做key，value固定为1，存入redis
 *  2.token验证：未携带token提示刷新页面，有token执行删除，删除失败示请勿重复提交，删除成功执行业务操作
 * @author luguoxiang
 * @date 2022/6/27
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IdempotentByToken {

    /**
     * 幂等性验证失败提示信息
     * @return
     */
    String message() default "请勿重复提交";

}
